
import 'dart:convert';

import 'package:flutter/cupertino.dart';
import 'package:shared_preferences/shared_preferences.dart';

/**
 * 配置类，用于存储各种配置信息
 * 采用单例模式，全局只产生一个对象
 */
class Config {
  static final Config _config = Config._internal();
  // 一个操作键值对的对象
  SharedPreferences _spf = null ;
  // 服务器的地址（此地址不可改变，必须在app运行期间能够访问的到）
  String _host = "https://www.unixbw.cn:6666" ; //"http://120.24.177.131:6666" ;
  // 图片服务器地址
  String _imgHost = "https://www.unixbw.cn:6666" ;

  // String updateHost = "http://120.24.177.131/update/checkUpdate.json" ; 
  // 用户的登录信息
  String _userInfo = null ;
  // 用户的token
  String _token = null ;
  // 用户的pwd
  String _pwd = null ;
  // 功能页的初始数据
  String funData = null ;

  bool fun = false ;
  bool school = false ;
  bool market = false ;

  String version = "1.1" ;

  BuildContext _context ;

  factory Config() { 
    return _config ;
  }

  void init(SharedPreferences spf) {
    this._spf = spf ;
    // 从缓存中将所有的配置信息读取出来
    if(spf.getString("imgHost") != null && spf.getString("imgHost") != ""){
      this._imgHost = spf.getString("imgHost") ;
    }
    // 从缓存中获取用户的登录信息
    this._userInfo = spf.getString("userInfo");
    // 获取登录凭证
    this._token = spf.getString("token") ;
    // this._imgHost = this._host ;
  }

  Config._internal();

  String getHost(){
    return this._host ;
  }

  String getFunData(){
    if(this.funData == null){
      return this._spf.getString("funData") ;
    }
    return this.funData ;
  }

  String setFunData(String data){
    this.funData = data ;
    this._spf.setString("funData", data) ;
  }

  String getImgHost(){
    return this._imgHost ;
  }

  dynamic getUserInfo(){
    return this._userInfo ;
  }

  setUserInfo(dynamic data){
    _pwd = data["pwd"] ;
    this._userInfo = jsonEncode(data) ;
    this._spf.setString("userInfo", this._userInfo) ;
  }

  setToken(String token){
    this._spf.setString("token", token) ;
    this._token = token ;
  }

  getToken(){
    return this._token ;
  }

  SharedPreferences getSpf(){
    return this._spf ;
  }

  setContext(BuildContext context){
    this._context = context ;
  }

  getContext(){
    return this._context ;
  }
}